//
//  ZMHomeViewModel.swift
//  ZMWeiboSwift
//
//  Created by pg on 2017/7/26.
//  Copyright © 2017年 pg. All rights reserved.
//

import UIKit
import SDWebImage
//
class ZMHomeViewModel: NSObject {

    //模型数组 数据源
    lazy var statusList: [ZMStatusViewModel] = [ZMStatusViewModel]()
    
    //MARK:- 加载微博网络数据
    func loadData(isUP:Bool, callBack: @escaping (Bool,String)->()){
        
        //获取当前用户的令牌
        let token = ZMUserAccountViewModel.sharedViewModel.accessToken!
        
        var maxId :Int64 = 0
        var sinceId: Int64 = 0
        
        if isUP {
            
            //上拉刷新数据
            maxId = statusList.last?.statusesModel?.id ?? 0
            if maxId > 0{
                maxId -= 1 //防止最后一个数据重复加载
            }
            
            
        }else{
            //下拉刷新数据
            sinceId = statusList.first?.statusesModel?.id ?? 0
            
        }
        
        //刷新数据完成之后需要显示的message
        var message : String = "没有加载到新的微博数据"
        
        
        //获取网络数据
        ZMNetworkingManager.sharedManager.requestStatuses(token: token, max_id: maxId ,sinceId: sinceId) { (response, error) in
            
            if error != nil {
                //网络数据加载错误
                print("error: \(error!)")
                callBack(false,message)
                return
            }
            
            //将加载的网络数据转编程模型数据
            let dic = response as! [String : Any]
            
            //获取响应数据中的微博字典数组
            let statusDicArray = dic["statuses"] as! [[String:Any]]
            //使用yymodel,将字典数组转变成模型数组
            
            let statusModelArray = NSArray.yy_modelArray(with: ZMStatusesModel.self, json: statusDicArray) as! [ZMStatusesModel]
            //将model转变成viewmodel
            var tempArr = [ZMStatusViewModel]()
            
            
            //定义多任务调度组
            let group = DispatchGroup()
            for statueModel in statusModelArray{
                
                //判断微博数据是否有单张图片
                if statueModel.pic_urls?.count == 1{
                    //获取下载图片的地址
                    let imageurl = statueModel.pic_urls?.first?.thumbnail_pic
                      
                    //使用sdwebimage下载图片
                    group.enter()
                    SDWebImageManager.shared().loadImage(with: URL(string:imageurl!), options: [], progress: nil, completed: { (image, imageData, error, cacheType, _, urlimage) in
                        
                        print("原创微博配图下载完成,地址:\(imageurl!)")
                        
                        //获取缓存中的图片
                  //   let temp =   SDWebImageManager.shared().cacheKey(for: URL(string:imageurl!))
                        
                       
                        //下载完成退出调度组
                        group.leave()
                        
                    })
                    
                    
                }
                //判断当前微博数据的转发微博数据中是否 有单张图片
                if statueModel.retweeted_status?.pic_urls?.count == 1{
                    
                    //获取下载图片的地址
                    let imageurl = statueModel.retweeted_status?.pic_urls?.first?.thumbnail_pic
                    
                    
                    //使用sdwebimage下载图片
                    group.enter()
                    SDWebImageManager.shared().loadImage(with: URL(string:imageurl!), options: [], progress: nil, completed: { (image, imageData, error, cacheType, _, urlimage) in
                        
                        print("原创微博配图下载完成,地址:\(imageurl!)")
                        
                        
                        
                        group.leave()
                    })

                }
                
                let viewModel = ZMStatusViewModel()
                //  关联ViewModel使用模型
                viewModel.statusesModel = statueModel
                
                tempArr.append(viewModel)
            }
            
            if isUP{
                self.statusList.append(contentsOf: tempArr)
            }else{
                self.statusList.insert(contentsOf: tempArr, at: 0)
            }
            
            message = "加载了\(tempArr.count)条微博"
          //  self.statusList = tempArr
            
            //数据加载成功,回调闭包
            //异步下载图片全部完成之后在进行闭包的回调
            group.notify(queue: DispatchQueue.main, execute: { 
                print("所有的图片下载完成")
                callBack(true , message)
            })
            //self.tableView.reloadData()
            
            
        }
        
    }

}
